#!/usr/bin/python
#coding:utf-8
'''
pandas 库模型类
'''
import pandas
import numpy as np 
from sklearn import model_selection

#加载csv文件模型
def load_csv(url):
    pandas.set_option('display.width', 200)  # 设置字符显示宽度
    pandas.set_option('display.max_rows', None)  #默认输出100行添加，多余行数'''，设为这个增大行数
    # pandas.set_option('display.max_colwidth',500)  #某列数据过长，如URl，太长部分显示省略号，设置这个。
    # pandas.set_option('display.height',2000) # 设置字符显示宽度
    pandas.set_option('display.max_columns', None)  # 设置显示行数，默认10行
    

    #加载数据
    dataframe = pandas.read_csv(url)#sep分割符，默认逗号，skiprows：跨过第几行。从0开始，header:列名在第几行，一般首行 0  nrows 读取多少行
    print(dataframe.shape) #数据行、列数，[行数，列数]
    print(dataframe.describe()) #查看数据特征 
    print(dataframe.corr())  #数据相关性

    print (dataframe.ix[[1,2,3],:] )#获取某几行所有列数据
    print (dataframe.ix[1,:] ) #获取某一行的所有列数据

    #删除列
    dataframe= dataframe.drop('column_name', 1)
    dataframe.drop('column_name',axis=1, inplace=True)
    dataframe.drop(DF.columns[[0,1, 3]], axis=1,inplace=True) 

    #打印NaN数据位置信息
    print (np.where(np.isnan(dataframe)) ) #[0] 行数
    #查找NaN数据
    where_are_nan=np.isnan(dataframe)
    #替换NaN数据为0
    dataframe[where_are_nan]=0

    #查找Ninf数据
    # where_are_inf=np.isinf(dataframe)
    # #替换inf数据为0
    # dataframe[where_are_inf]=0

    #获取特征名
    names = dataframe.columns  #获取特征名列表
    names = np.array(names,dtype=np.str) #重定义特征名数据类型
    names = names[0:names.shape[0]-1]  #去除最后一列标签

    #获取特征
    array = dataframe.values
    x = array[:,0:array.shape[1]-1] 
    y = array[:,array.shape[1]-1]

    x = np.delete(x,[21,23],axis=1)  #axis=1 删除某几列数据  axis=0 删除某几行数据

    #数据拆分
    x_train,x_test,y_train,y_test = model_selection.train_test_split(x,y,test_size=0.25)  #25%用于验证 参数random_state：填1时，每次得到结果相同，0或不填时，每次获取结果不同

    #处理每行每列数据
    rowSize,columnSize=dataframe.shape
    print(rowSize,columnSize)
    lable =columnSize-1
    array = dataframe.values
    for one in array:
        for index in range(columnSize):

            if index == lable:
                print("-----",one[index],"--------")
            else:
                print(one[index])
    

# 创建pandas对象
def createData():
    # series只能创建一维对象，底层是就与numpy实现
    ser =pandas.Series([4.5,7.2,-5.3,3.6], index=['d','b','a','c'])
    print(ser.describe())

#pandas数据格式化显示
def dataDF():
    data=np.ones((2,3))
    print(data.shape)
    size=data.shape[1] #获取列数
    result=[]
    for index in range(size):
        listData=data[:,index]
        #最小值 最大值 和 平均值 标准差 方差 协方差
        result.append([listData.min(),listData.max(),listData.mean(),listData.sum(),listData.std(),listData.var(),np.cov(listData)])
    columns = ['min','max','mean','sum','std','var','cov']
    # columns= ['最小值','最大值','平均值','和','标准差','方差','协方差']
    pandas.set_option('display.width',800)
    df = pandas.DataFrame(result,columns=columns)  #index 设置列名
    print(df)

dataDF()